﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CRUD.InterfaceDAO;
using GestionadorBaseDatos;

namespace CapaNegocios
{
    /// <summary>
    /// interfaz que define el comportamiento de un Usuario
    /// </summary>
    public interface IGestionUsuario
    {
        /// <summary>
        /// Metodo que te permite obtener todos los usuarios
        /// </summary>
        /// <returns>Retorna una lista de objetos de tipo Usuario</returns>
        List<Usuario> ObtenerUsuarios();

        /// <summary>
        /// Metodo que te permite registrar un usuario
        /// </summary>
        /// <param name="usuario">Recibe como parametro un objeto de tipo Usuario</param>
        void RegistrarUsuario(Usuario usuario);

        /// <summary>
        /// Metodo que permite obtener un usuario dado su nickname
        /// </summary>
        /// <param name="nickname">Recibe como parametro un tipo de dato string</param>
        /// <returns>Retorna un objeto de tipo Usuario</returns>
        Usuario ObtenerUsuarioPorNickname(string nickname);

        /// <summary>
        /// Metodo que permite obtener un usuario dado su nickname y su password
        /// </summary>
        /// <param name="usuario">Recibe como parametro un objeto de tipo Usuario que tiene los atributos
        /// nickname y password no nulos</param>
        /// <returns>Retorna un objeto de tipo Usuario</returns>
        Usuario ObtenerUsuario(Usuario usuario);

        /// <summary>
        /// Metodo que permite enviar un correo de bienvenida a los nuevos usuarios registrados
        /// </summary>
        /// <param name="usuario">Recibe como parametro un objeto de tipo Usuario</param>
        void EnviarCorreoBienvenida(Usuario usuario);

        /// <summary>
        /// Metodo que permite actualizar los datos de un usuario
        /// </summary>
        /// <param name="actualizarUsuario">Recibe como parametro un objeto de tipo Usuario</param>
        void ActualizarDatosUsuario(Usuario actualizarUsuario);


        /// <summary>
        /// Metodo que permite enviar un correo a un usuario que sera dado de baja
        /// </summary>
        /// <param name="usuario">Recibe como parametro un objeto de tipo Usuario</param>
        void EnviarCorreoSituacion(Usuario usuario);
    }
}
